#Dates
import datetime
datetime.date(2014, 1, 6)
datetime.date(year=2014, month=1, day=6)


#Named constructors
datetime.date.today()
datetime.date.fromtimestamp(1000000000)
datetime.date.fromordinal(720669)

d = datetime.date.today()
d.year
d.month
d.day


#Instance methods
d.weekday() #0 to 6, starts on Monday's
d.isoweekday() #1 to 7, starts on Monday's 

d.isoformat()
d.strftime('%A %d %B %Y')
"The date is {:%A %d %B %Y}".format(d)
d.strftime('%A %-d %B %Y') #Hardware specific
"{date:%A} {date.day} {date:%B} {date.year}".format(date=d)

datetime.date.min
datetime.date.max
datetime.date.resolution #timedelta datatype covered later


#Times
datetime.time(3) #hours
datetime.time(3, 1) #hours, minutes
datetime.time(3, 1, 2) #hours, minutes, seconds
datetime.time(3, 1, 2, 232) #..., seconds, microseconds
datetime.time(hour=23, minute=59, second=59, microsecond=999999)
datetime.time(23, 59, 59, 999999)

t = datetime.time(10, 32, 47, 675623)
t.hour
t.minute
t.second
t.microsecond

#Formatting
t.isoformat()
t.strftime('%Hh%Mm%Ss')
"{t.hour}h{t.minute}m{t.second}s".format(t=t)

datetime.time.min
datetime.time.max
datetime.time.resolution


#Datetimes
from datetime import datetime #avoid
datetime.time 
import datetime as dt
dt.time

#Constructors
datetime.datetime(2003, 5, 12, 14, 33, 22, 245323)
datetime.datetime.today()
datetime.datetime.now()
datetime.datetime.utcnow()

datetime.datetime.fromordinal(5)
datetime.datetime.fromtimestamp(3635352)
datetime.datetime.utcfromtimestamp(3635352)

datetime.datetime(1970, 2, 12, 1, 49, 12)
d = datetime.date.today()
t = datetime.time(8, 15)
datetime.datetime.combine(d, t)

dt = datetime.datetime.strptime("Monday 6 January 2014, 12:13:31", "%A %d %B %Y, %H:%M:%S")
dt

dt.date()
dt.time()
dt.day
dt.isoformat()


#Durations
datetime.timedelta(milliseconds=1, microseconds=1000)
td = datetime.timedelta(weeks=1, minutes=2, milliseconds=5500)
td
td.days
td.seconds
td.microseconds

str(td)
repr(td)

a = datetime.datetime(year=2014, month=5, day=8, hour=14, minute=22)
b = datetime.datetime(year=2014, month=3, day=14, hour=12, minute=9)
a - b
d = a - b
d
d.total_seconds()

datetime.date.today() + datetime.timedelta(weeks=1) * 3

#arithmetic on TIME objects not permitted
f = datetime.time(14, 30, 0)
g = datetime.time(15, 45, 0)
f - g 


#Time zones
cet = datetime.timezone(datetime.timedelta(hours=1), "CET")
cet
departure = datetime.datetime(year=2014, month=1, day=7, arrival = datetime.datetime(year=2014, month=1, day=7, hour=13, minute=5, tzinfo=datetime.timezone.utc)
arrival - departure
str(arrival - departure)
